<?php

namespace app\xiaohongshu\controller;

use app\common\controller\Api;
use app\common\controller\XiaohongshuApi;
use app\common\model\xiaohongshu\Black as BlackModel;
use app\common\model\xiaohongshu\Search;
use app\common\model\xiaohongshu\Type;
use app\xiaohongshu\service\XhsService;
use app\common\model\xiaohongshu\Author;
use think\exception\ValidateException;

class Black extends XiaohongshuApi
{

    /**
     * 列表黑名单
     *
     * @return \think\response\Json
     */
    public function lists()
    {
        // 获取请求参数
        $page = $this->request->get('page', 1); // 当前页码，默认值为1
        $limit = $this->request->get('limit', 10); // 每页记录数，默认值为10
    
           // 获取当前用户ID
        $userId = $this->auth->id;

        // 获取搜索记录列表，添加用户筛选和倒序排序

        
        // 获取黑名单列表，添加分页和倒序排序
        $list = BlackModel::with(['author','type'])->where('user_id', $userId)->order('id', 'desc')->paginate($limit, false, ['page' => $page]);

        return $this->success('请求成功', [
            'total' => $list->total(), // 总记录数
            'current_page' => $list->currentPage(), // 当前页码
            'last_page' => $list->lastPage(), // 最后一页
            'data' => $list->items(), // 当前页数据
        ]);
    }

    public function type()
    {
        $list = Type::where('status', 1)->select();
        return $this->success('请求成功', $list);
    }


    /**
     * 添加黑名单
     *
     * @icon fa fa-circle-o
     */
    public function add()
    {
        $validationRules = [
            'link' => 'require',
            'xiaohongshu_type_id' => 'require',
            'verify_data' => 'require',
            'reason' => 'require',
            'reason_images' => 'require',
        ];
        // 获取请求参数
        $params = $this->request->post();

        $XhsService = new XhsService();
        $params['uuid'] = $XhsService->analyzeUrl($params['link']);

        // 将图片数组转换为逗号分隔的字符串
        $params['reason_images'] = is_array($params['reason_images']) ? 
            implode(',', $params['reason_images']) : 
            $params['reason_images'];
            
        $params['user_id'] = $this->auth->id;
        dump($params);
        try {
            // 验证输入
            $this->validate($params, $validationRules);

            // 创建黑名单记录
            BlackModel::create($params);

        } catch (ValidateException $e) {
            return $this->error($e->getMessage());
        } catch (\Exception $e) {
            return $this->error('添加失败: ' . $e->getMessage());
        }

        return $this->success('请求成功',[]);
    }

    public function search()
    {
        // 获取请求参数
        $keyword = $this->request->post('keyword', ''); // 小红书ID
        $userId = $this->auth->id; // 当前用户ID
        $page = $this->request->get('page', 1); // 当前页码
        $pageSize = 10; // 每页显示条数

        // 检查是否提供了小红书ID
        if (empty($keyword)) {
            return $this->error('keyword不能为空');
        }

        // 开始事务
        \think\Db::startTrans();
        try {
            
        $list = Author::with(['black' => function($query) {
            $query->where('status', 1);
        }])
    ->where(function ($query) use ($keyword) {
        $query->whereLike('uuid', '%' . $keyword . '%')
              ->whereOr('nickname', 'like', '%' . $keyword . '%');
    })
    ->paginate(10);
            
            // 记录状态
            $status = 'success';
            $message = '请求成功';


                // 扣除积分（假设有一个 User 模型和一个 deductPoints 方法）
                $user = \app\admin\model\xiaohongshu\User::find($userId);
                if (!$user || $user->score <= 0) {
                    $status = 'insufficient_points';
                    $message = '积分不足';
                } else {
                    $user->score = $user->score - 1; // 扣除1积分
                    $user->save();

                    // 记录搜索日志（假设有一个 SearchLog 模型）
                    Search::create([
                        'user_id' => $userId,
                        'keyword' => $keyword,
                        'createtime' => time(),
                        'updatetime' => time(),
                    ]);

                    if ($list->isEmpty()) {
                        $status = 'not_found';
                        $message = '未找到相关记录';
                    }
                }

            // 如果未找到相关记录



            // 提交事务
            \think\Db::commit();
        } catch (\Exception $e) {
            // 回滚事务
            \think\Db::rollback();
            return $this->error('操作失败: ' . $e->getMessage());
        }

        return $this->success($message, [
            'list' => $list->items(),
            'total' => $list->total(),
            'current_page' => $list->currentPage(),
            'last_page' => $list->lastPage(),
            'status' => $status, // 状态字段
            'status_message' => $message, // 状态字段
        ]);
    }


    /**
     * 搜索黑名单并消耗积分
     *
     * @return \think\response\Json
     */
    public function search1()
    {
        // 获取请求参数
        $xiaohongshuId = $this->request->get('keyword', ''); // 小红书ID
        $userId = $this->auth->id; // 当前用户ID

        // 检查是否提供了小红书ID
        if (empty($xiaohongshuId)) {
            return $this->error('小红书ID不能为空');
        }

        // 开始事务
        \think\Db::startTrans();
        try {
            // 查询黑名单记录
            $list = Author::where('uuid', $xiaohongshuId)->select();

//            if (!$list) {
//                return $this->error('未找到相关记录');
//            }

            // 扣除积分（假设有一个 User 模型和一个 deductPoints 方法）
            $user = \app\admin\model\xiaohongshu\User::find($userId);
            if (!$user || $user->score <= 0) {
                return $this->error('积分不足');
            }
            $user->deductPoints(1); // 扣除1积分
            $user->save();

            // 记录搜索日志（假设有一个 SearchLog 模型）
            Search::create([
                'user_id' => $userId,
                'keyword' => $xiaohongshuId,
                'createtime' => time(),
                'updatetime' => time(),
            ]);

            // 提交事务
            \think\Db::commit();


        } catch (\Exception $e) {
            // 回滚事务
            \think\Db::rollback();
            dump($e);
            return $this->error('操作失败: ' . $e->getMessage());
        }

        return $this->success('请求成功', $list);
    }
    /**
     * 获取黑名单详情
     *
     * @param int $id
     * @return \think\response\Json
     */
    public function detail($id)
    {
        // 获取指定黑名单记录
        $blackEntry = BlackModel::find($id);
        if (!$blackEntry) {
            return $this->error('未找到该记录');
        }

        return $this->success('请求成功', $blackEntry);
    }

    /**
     * 删除黑名单
     *
     * @param int $id
     * @return \think\response\Json
     */
    public function delete($id)
    {
        // 查找记录
        $blackEntry = BlackModel::find($id);

        if (!$blackEntry) {
            return $this->error('未找到该记录');
        }

        try {
            // 删除黑名单记录
            $blackEntry->delete();

        } catch (\Exception $e) {
            return $this->error('删除失败: ' . $e->getMessage());
        }

        return $this->success('删除成功');
    }
}
